encyklopedia.space

MVC (programowanie)

MVC (z ang. Model‑View‑Controller) – architektoniczny wzorzec projektowy stosowany w tworzeniu aplikacji programistycznych, który rozdziela logikę aplikacji na trzy odrębne komponenty: Model, View (widok) oraz Controller (sterownik). Dzięki takiej separacji uzyskuje się lepszą modularność, możliwość ponownego użycia kodu oraz ułatwione testowanie jednostkowe.

Historia

Wzorzec MVC został po raz pierwszy opisany w 1979 roku przez Trygve Reenskaug w ramach prac nad językiem Smalltalk w Xerox PARC. Początkowo używany był w systemach graficznych, ale już w 1994 roku pojawiły się pierwsze implementacje w środowiskach webowych. Od 2000 roku MVC stał się podstawą wielu popularnych frameworków, m.in. ASP.NET MVC, Spring MVC, Ruby on Rails i Django (który wykorzystuje wariant MTV).

Podstawowe komponenty

  • Model – warstwa przechowująca dane oraz logikę biznesową. Odpowiada za dostęp do bazy danych, walidację danych i operacje na nich. Przykładowo, w Javie model może być reprezentowany przez klasy POJO z adnotacjami JPA.
  • View – warstwa prezentacji, której zadaniem jest wyświetlanie danych użytkownikowi. Może to być szablon HTML, interfejs graficzny (GUI) lub inny format wyjściowy. W ASP.NET widoki są najczęściej plikami .cshtml z użyciem silnika Razor.
  • Controller – pośrednik przyjmujący żądania od użytkownika, wywołujący odpowiednie metody modelu i wybierający widok do renderowania. W Rails kontrolery dziedziczą po ApplicationController.

Przepływ działania

Typowy scenariusz w architekturze MVC wygląda następująco:

  1. Użytkownik wysyła żądanie HTTP do aplikacji.
  2. Router (część frameworka) przekierowuje żądanie do odpowiedniego Controllera.
  3. Controller przetwarza żądanie, odwołuje się do Modelu w celu pobrania lub modyfikacji danych.
  4. Na podstawie wyniku operacji wybierany jest View, który renderuje odpowiedź (np. HTML).
  5. Odpowiedź jest zwracana do przeglądarki użytkownika.

Zastosowania

MVC jest wykorzystywane w różnych typach aplikacji:

  • Strony internetowe i aplikacje webowe (Spring MVC, ASP.NET MVC).
  • Aplikacje desktopowe (frameworki .NET, Qt).
  • Systemy mobilne (np. Android przy użyciu architektury MVVM, będącej ewolucją MVC).
  • Systemy oparte na mikroserwisach, gdzie każdy serwis może implementować własny wariant MVC.

Popularne implementacje i frameworki

Framework Język Rok pierwszej wersji Link wewnętrzny
ASP.NET MVC C# 2009 ASP.NET MVC
Spring MVC Java 2003 Spring MVC
Ruby on Rails Ruby 2005 Ruby on Rails
Django (MTV) Python 2005 Django

Zalety i wady

Zalety

  • Silna separacja warstw ułatwia utrzymanie i rozwój projektu.
  • Umożliwia równoległą pracę zespołów (frontend vs. backend).
  • Ułatwia testowanie jednostkowe komponentów Modelu i Controllera bez zależności od UI.
  • Wspiera ponowne użycie kodu i dziedziczenie komponentów.

Wady

  • Wprowadza dodatkową warstwę abstrakcji, co może zwiększyć złożoność projektu.
  • Nie zawsze jest optymalne dla bardzo małych, jednofunkcyjnych aplikacji.
  • Niektóre frameworki narzucają konwencje, które mogą ograniczać swobodę projektową.

Przykładowy kod (ASP.NET MVC, C#)

using System.Web.Mvc;
using MyApp.Models;

public class ProduktyController : Controller
{
    // GET: /Produkty/
    public ActionResult Index()
    {
        var produkty = ProduktyRepository.PobierzWszystkie(); // Model
        return View(produkty); // View
    }

    // POST: /Produkty/Dodaj
    [HttpPost]
    public ActionResult Dodaj(Produkt nowyProdukt)
    {
        if (ModelState.IsValid)
        {
            ProduktyRepository.Dodaj(nowyProdukt); // Model
            return RedirectToAction("Index");
        }
        return View(nowyProdukt); // View z błędami walidacji
    }
}
    

Powiązane pojęcia

Wzorzec projektowy, architektura oprogramowania, separacja kodu, Inwersja zależności (IoC), testowanie jednostkowe.

Bibliografia

  1. Reenskaug, T. „Model-View-Controller”. Smalltalk 1979.
  2. Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides. Design Patterns: Elements of Reusable Object-Oriented Software. Addison‑Wesley, 1994.
  3. Microsoft Docs. ASP.NET MVC. 2009.
  4. Rod Johnson. Spring MVC. SpringSource, 2003.
  5. David Heinemeier Hansson. Ruby on Rails. 2005.